package com.luoc;

import com.luoc.service.Element;
import com.luoc.service.List;
import com.luoc.service.Visitor;
import com.luoc.service.impl.ConcreteElementA;
import com.luoc.service.impl.ConcreteElementB;
import com.luoc.service.impl.VisitorA;
import com.luoc.service.impl.VisitorB;

import java.util.ArrayList;

/**
 * @Author: luoc
 * @Date: 2019/10/10 17:13
 * 访问者模式(Visitor Pattern):提供一个作用于某对象结构中的各元素的操作表示，
 * 它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式是一种对象行为型模式。
 *
 */
public class VisitorPattern {
    public static void main(String[] args) {
        ArrayList<Element> list = new ArrayList<>();

        list.add(new ConcreteElementA());
        list.add(new ConcreteElementB());

        Visitor visitorA = new VisitorA();
        Visitor visitorB = new VisitorB();
        for (Element element: list){
            element.accept(visitorA);
        }

        for (Element element: list){
            element.accept(visitorB);
        }


    }
}
